Checking for a @facebook.com email address is not reliable. Users can choose to not publish that and non-facebook address book entries could have that as their email address.
There is a special field in the address book called ExternalRepresentation that seems to carry some extra info about synced from facebook contacts. The first part of this always seems to be the same.
WARNING: This may not work all the time and probably will break someday in the future. This is undocumented.
static NSData *facebookExtRepPrefix = [NSData dataWithBytes:"bplist00\xd4\x01\x02\x03" length:12];
#define kABPersonExternalRepresentationProperty 39
then
NSData *extRep = (__bridge NSData *)ABRecordCopyValue(theRecord, kABPersonExternalRepresentationProperty);
BOOL isFacebook = [[extRep subdataWithRange:NSMakeRange(0, facebookExtRepPrefix.length)] isEqualToData:facebookExtRepPrefix];
you can then read the kABPersonPersonLinkProperty (#42) - that value will be the same on the native contact that is linked to it.