This depends on the type of the common files, and in particular, where they are needed in the build process.
* Custom tasks / loggers need to be present when msbuild.exe is started, meaning they need to get sync'ed to the build machine when TfsBuild.proj and the rest of the build type files are. Currently, the only way to get this to happen is to put these files into the same directory as TfsBuild.proj - this isn't particularly helpful for custom tasks / loggers that get used in multiple build types, and we are planning to address this issue in a future release.
* Other files which are needed at compile time (or at some other point during the build) can really be stored anywhere, though your life will be much simpler if you put them somewhere within the same Team Project as the build types in which they are needed. You'll just need to make sure that you adjust your various WorkspaceMapping.xml files such that the common files are sync'ed to some known location. (By default, the entire contents of the team project are sync'ed, but if you have modified this behavior you may need to add additional mappings for the common files)
-Aaron
Nope - the two options right now are (a) putting all your common stuff (that has to be there at script start time) into each build type directory in source control, or (b) manually installing it to some known location on each build machine.
-Aaron