In our data warehouse, we built an application (data warehouse tracker) which maintains versions of data warehouse objects over time. When employees in our data warehouse (project manager, data modeler, DBA, ETL developer, Quality Assurance, data warehouse specialist, report writer, etc...) work on a project to build a new data model, we attach new objects and existing objects to those projects. Every change to a database object requires an explanation of what the object is being used for or what they are fixing in that object (new/change to data model, script being run to fix a data quality issue, ETL source code migration within informatica, defect being logged to a batch--or ETL staging or atomic run for data migration, report bug, etc...). When there is a report request using that column (or table), we require a comment about why they are using that object. If an defect is logged to that object, we attach a comment for the defect. Someone reading about that object can see all changes made to that object, so they can get a good understanding of what it's used for.
We started using Meta Data Manager in Informatica, but nobody ever updated the descriptions within the data dictionary. Because there may be different definitions of that object, we store the definition of all changes over time. Our new approach works well, because anyone can go and correct someone else's mistake, and that keeps everyone honest. Everyone using the object can comment on it's definition. We still track source lineage within Informatica, but we just link to that lineage from our data warehouse tracker.