Microsoft has a platform called the Sync Framework which handles synchronization of data between devices being online and offline. You applications use this framework to access data storage. Let's first cover some key terms in this platform.
A replica is a given data store. It can be the source or destination of a sync. A participant is the place where data can be retrieved. There are different levels of participants. If you can run an application on the participant, then it is a full participant. Otherwise it is a partial participant.
There is an engine in the framework that controls the process. It works with a provider, which can be one of 3 types. These types are database, RSS, and file. Alternatively you can write your own customer provider, which sounds like a complex undertaking to me. On a final note, you can apply a filter which restricts what gets synchronized and what does not.
A Little Bit of Crypto - I have been trying to figure out to "collision resistant" some of these standard hash functions are. It is a tough concept to get my head around. I figure...