Avoiding duplication is even more important if you are designing a framework. If you provide classes that duplicate the functionality of bits of Cocoa then your code will be much harder to use. The Address Book framework is a good example of something that failed to do this. If this had used NSDictionaries, or even a simple NSDictionary subclass, instead of ABGroup and friends, then it would have been much easier to use.
For applications, integration with the rest of the system is very important if you want users to be able to learn to use your program quickly. The three frameworks outlined in this article are not the only ones to keep in mind. The address book and calendar store APIs provide direct access, but you can also access these stores, as well as a few other things like Mail.app's notes, using the Sync Services API. This is not a replacement for the first two APIs. It provides a way of keeping a copy of the data that they store synchronized with another copy that your application manages.
Two of the other important features to consider are Spotlight and Quick Look. These make it easier for users to find documents created by your application, by browsing and searching the filesystem, respectively. Supporting them is relatively simple, but makes an application feel a lot more polished.
Take a look at the list of frameworks on the Apple web site for more examples. The IMKit framework, for example, can tell you the user's current status and lets you find out whether people in the address book are online. Mail.app uses this to put glowing lights next to emails from users who are currently online.