I bought Spanning Sync's Contact Cleaner for $5 from the OS X App Store.
I've used their flagship product for years to sync my OS X Address Book to Google. It's relatively expensive ($25 or so a year) but it mostly works. Since synchronization between differing data models is an impossible problem, "mostly works" is excellent.
So I was willing to give this utility a try.
Briefly, for an early product, it works pretty well. It has a few bugs, but it's definitely worth $5. The app offers to make an Address Book backup on 1st use -- that's a good idea.
I'm a pretty good test case because
- I sync my OS X Address Book to both Google (Spanning Sync) and MobileMe
- I have over 800 cards in my personal book (more in my separate corporate directory)
- I routinely define a "Family" as a "Business" to get around the first name, last name problem.
- For individuals I often link them into "Families" by use of the "Business" field to hold a family name (or, in my case, the domain name for our family)
These are the bugs I found:
- If you choose open in Address Book, then change type from individual to business in Address Book, Contact Cleaner will crash
- Details view for "one name" errors omits email addresses
- Details formatting not always optimal
- Can't manage the individual to company conversion
I'm also a bit suspicious about how it manages group memberships when it merges or alters contacts. This may just be my paranoia coming out.
Some advice on using Contact Cleaner
- Turn off all other sync while using this tool. I sync my OS X Address Book to both MobileMe (and thus to my iPhone) and to Google Contacts . Just disable your network connection.
- If you edit in the Address book, save your changes (click out of edit mode) then Rescan in Contacts Cleaner. Otherwise it won't pick up your edits.
- I like to make changes in Address Book then rescan - gives me more control and I can see the full results
- Be wary if you use non-default Address Book fields. This kind of cleanup is a very hard problem.
 I sync a selected subset of my entire Address Book to Google Contacts. I create new addresses in OS X and then let them sync to Google. Once they sync I can safely make smaller edits on either side (esp. email address updates). I can also do merges safely on the Google side. Group assignments are independent. I define a "Family" entry as a type of "Business", that seems to work.