First off - if the CRM is going to be a product you sell, by all measn build it - if it is for internal use I'd say let soemone else endure the pain of solving these questions and just buy a CRM.
Other than database level replication, which I don't think is sufficient for solving everything, you'll really need to 'roll your own'.
I came into a team planning some CRM-like components of a system, and initially they'd planned to use database replication because it looked easy - until you hit the conflict resolution.
In the end we changed to using GUIDs as unique identifiers because it made the handling of new records created by the users much simpler - otherwise you end up with these awkward numeric ID partitioning schemes for each client system. Road to Hell.
Nothing helps with conflict resolution where changes get made between syncs, its an application level concern. The database might get a list of transactions to replay from Bob, but if he edited the same stuff as Alice - which version should it use? timestamps aren't enough because what if Alice fills hers out as she goes and has an early timestamp, but Bob waits till he's having lunch and gets a later timestamp.
I'd really suggest reading all the articles/blog entries you can on synchronisation and conflict resolution - sync is simple from a height of 10,000ft where you can be all hand wavy, but its a different story when you're down in the muck.