This will be one of the new features available with the Legend in 10.1.
Currently, the only way to do it is via ArcObjects development. It could be done with arcpy.mapping but each feature type would need to be its own layer. Then you could perform a spatial overlay, determine what is in the extent, and then remove or add the appropriate layers. You would need to make sure your legend has the setting to automatically update with layer changes.
Jeff