Here is a view that I add to my databases that I use to create a column level data dictionary. I think I will incorporate the ideas from this article into it.
CREATE VIEW [dbo].[DataDictonary] AS
SELECT schemas.name AS SchemaName
,all_objects.name AS TableName
,syscolumns.id AS ColumnId
,syscolumns.name AS ColumnName
,systypes.name AS DataType
,syscolumns.length AS CharacterMaximumLength
,sysproperties.[value] AS ColumnDescription
,syscomments.TEXT AS ColumnDefault
,syscolumns.isnullable AS IsNullable
FROMsyscolumns
INNER JOIN sys.systypes ON syscolumns.xtype = systypes.xtype
LEFT JOIN sys.all_objects ON syscolumns.id = all_objects.[object_id]
LEFT OUTER JOIN sys.extended_properties AS sysproperties ON (sysproperties.minor_id = syscolumns.colid AND sysproperties.major_id = syscolumns.id)
LEFT OUTER JOIN sys.syscomments ON syscolumns.cdefault = syscomments.id
LEFT OUTER JOIN sys.schemas ON schemas.[schema_id] = all_objects.[schema_id]
WHERE syscolumns.id IN (SELECT id
FROM sysobjects
WHERE xtype = 'U')
AND (systypes.name <> 'sysname')