Among all the people I interact with, the only set of contacts that I do not need to save their info is co-workers in the same company; the enterprise-wide LDAP (ActiveDirectory in this case) has everything.
My functional requirements that I have not found anything to satisfy them:
I have different devices and clients, and some contacts only make sense on one (or some) of the devices. It would be ideal if the sync process could use some group/tag and operate on a subset of all data. I have not found this anywhere and essentially gave up on this, willing to live with having all data in all places.
Another point is data shared amongst contacts: many employees of company X share the same work address; or married couple John and Jane share the same home address and the same landline phone. If I duplicate the info and this phone rings me up, which name should be displayed as caller?
In the end, I use a completely self-made setup. Data are entered via text files in a custom markup, then translated into graph data (RDF to be exact) and stored in a data store. Export to VCF (among other formats) helps with importing the data into a CardDAV server, from where all device/client sync.
I would love to find something that will allow me to abandon this setup, but nothing is there yet.