Due to the way the remoteSince timestamp is calculated (ie, it's the timestamp of when readSyncStateData() was called during the previous sync, basically), a previously-upsynced contact will be returned as a remote addition in the server-side-changeset during the getRemoteChangesSince() step -- from which we deduce its existence locally (ie the mapping to the local contact) from the custom property which must store the contactId in stringified form (which I just remember I haven't implemented yet).

In short, from the POV of this function, every contact in the modified/deleted list passed here MUST have an associated guid detail (ie, has a synctarget constituent).