Abandon all hope, ye who enter here. Dante.
This one is for Martin.
I have synchronized my OS X Address Book entries with Google Contacts and MobileMe/iPhone for over a year. It mostly works. This is how I would do the Google Calendar part of it if I were starting out today. The MobileMe stuff is relatively easy  and I won't describe it further.
Before I begin, however, I require any reader to pass through three gates of informed consent ...
If there's anything in this post you don't understand, you shouldn't try this. It could blow your Address Book apart. You might spend months reassembling it.
Gate 2. Read my 2011 resolution on managing complexity.
This is on the premature adoption end of things. It's taken about twenty years of boring, career destroying committee work to develop an incomplete and flawed standard sharing calendars and invitations. We're ten years of pain away from a similar standard for exchanging contact information.
Gate 3: Scan my Synchronization is Hell post.
Ok, you're informed. If you proceed, as a fringe benefit, you may come to understand why healthcare, a trillion dollar industry, seems stuck in the dark ages of IT. If it's hard to get address books to communicate, how much harder is it to send patient records from system A to system B? You may start to understand things like Halamka's post on a "Universal Exchange Language" for healthcare (heavens, but he's an optimist).
I use OS X Address Book as the "source of truth". That's where I add new addresses, and that's where I define what gets pushed to Google. If most of your contacts are in Google you would take a different approach.
Step 1: Buy Spanning Sync's Contact Cleaner ($5, App store) and try Spanning Sync ($25 a year, $20 if you use my referral code NXC8PS, 15 day free trial). I don't use it sync calendars, just contacts.
Step 2: Back up Address Book. Then use Contact Cleaner to clean it up; note warnings about unusual suffixes and the like. Sync works best with a first name, last name for individuals (no spaces) and a string (with spaces) for "companies".
Step 3: Define a group in Address Book that you'll sync to Google Contacts. Start small and build up. I call mine "Google Sync. Configure Spanning sync to only sync that group:
Step 4: After sync used Contact Cleaner again. Try a few reps until you're no longer getting duplicate or messed up contacts.
Step 5: As you use Google, keep an eye out for duplicates. Use Google's merge tool opportunistically. It works well, better than OS X Address Book merge.
Step 6: Over time add more names to the Address Book Google Sync group. Until you've got every address you care about synchronizing.
- fn --
 Apple controls both data models and they're roughly congruent, at least if you're on 10.6.6. I don't sync via iTunes because I already own MobileMe and it lets me sync to my accounts on multiple machines. The rest of my family can't sync directly because we all share one iTunes account, they have to sync to MobileMe and separately to their OS X accounts on multiple machines.