Any way to make stored procedure code dynamically reference other databases, without dynamic sql?
Apart from design considerations raised in the comments, ...

Consider one level of indirection prior to creation of the stored procedure:


write a template for the stored procedure, with token placeholders for the schema names


INSERT DBNAMETOKEN.dbo.Table1 VALUES('a');


write a pre-deployment script (sed?) that creates a new file  specifically for each schema, substituting the actual schema name for the token. 
place resulting scripts in per-schema deployment directories, from which they may be installed as usual.


Benefits


Scales well
Both template and custom versions may be under version control
Updates/Fixes may still be deployed through a single change to the template file and propagated through a build step
Possibly easier to schedule/track deployment of updates to each schema  depending on situation
Reduces the stored procedure to a simple(r) set of SQL focussed on the task at hand, rather than the dynamics of making it work across different schema.