Hi, I've already rated this as excellent, though (adding to what kselic said) surrounding the dbnames with  is mandatory because you can have dbnames with various issues, like 'REGISTER DATABASE' (contains space...).
A last couple suggestion:
1 add to #database_collations_by_column table a column named 'tablename', both in insert and in last select so you can tell not only column name but also in which table it is, to ease searching for problems in a db...
2 change from varchar(100) to sysname the column type in those #tables...
But anyway very useful, I've found a few columns that will create problems in some not distant future.