Here's a feature request that would be required to allow a module implement hook_field_access() and grant access to a field based on node data.
The problem: Actually, hook_field_access() can only be used to grant/deny access to a field based on user permissions.
Use case: We need to implement a module that grants/denies access to a field based on node author provided settings. For example, we are using content_profile, which is CCK attached to the user profile. We want to let each user decide if certain fields are private (only the user can see the field), or these fields can be viewed by all users, or these fields can be viewed by (say) friends.
We can do this with a module such as CCK Private Fields, which is in the kitchen right now. This module allows the user select the privacy options for certain fields in the content_profile. But then, to check if another user can view these fields, when implementing hook_field_access(), we need to get access to the node to load the privacy settings defined for that particular user (that content_profile node). So, ideally, we would have to provide the $node to hook_field_access().
If the node was not available, then we could not check the privacy settings for those fields, so we would have to deny access to them for privacy reasons.
I've been looking at all places where content_access() is invoked, and it seems pretty easy to add the $node as an additional argument that could be passed to hook_field_access(). This feature would not affect existing code because an additional argument does not affect the behavior of those who implement hook_field_access().
I hope it makes sense.