I don't know about MS best practice but I can comment on this.
For code that is not going to be used by a computed column in a table, I would say build a database that is common to your servers and put the code there, if you have updates to that code later that either change behavior or are breaking changes they get a new name so as not to disrupt existing code.
For code that IS going to be used by a computed column in a table, it MUST reside in the database that the table does, end of story.. This really only applies to UDFs..
CEWII