What I would suggest is the ability for users to mark objects (tables or code objects) as deprecated. If any of these objects is then accessed, a note is included in the error log or an event raised.
I also would suggest that there be an instance, database, and/or object level retention period for deprecated objects, similar to the collation granularity, that would allow the instacne to remove these objects after xx time. Perhaps an automatic backup of the object (script and BCP out) could be performed as well.