How about ALTER SESSION?
ALTER SESSION SET CURRENT_SCHEMA = schema
This will allow you to log in as a user who has been granted access rights to the table belonging to Schema X and run an SP that changes the session to Schema X. External code will not know that this has happened.
However, if your external code indicates the X scheme:
select * from X.tableName
I do not think this will cause an error.
Perhaps you could explain why it is important that the client code gets an error when it uses the correct name of the current schema?
Is it possible to create a new schema, pass the ownerhp of the old schema objects, and then delete the old schema, and then use the above approach?
PS See AFTER LOGON triggers: http://psoug.org/reference/system_trigger.html
PPS Since you developed your requirements:
... a table can be synonymous with a database link, or a table can be placed in several schemas, each for a different release. It must be left in the database to resolve the actual location of the object referenced by the client application.
If the location of the object is not in CURRENT_SCHEMA, but in some other schema that has tables named CUSTOMER, for example, the database engine will not know that the statement sent to it by the client application should refer to another schema if the scoreboard name is not has such qualifications. This implies a level of meta-information that the engine does not possess, although it provides the developer with tools for creating such intelligence in the form of stored procedures and triggers and providing / removing control over objects.
Your best chance of success in this intelligence in the end will be to revoke all direct rights to tables and views and require client applications to access objects through stored procedures, since the database engine itself does not know things like levels release applications. I do not see a purely DECLARATIVE way to achieve it. In many ways, this was supposed to be procedural. Your internal logic should take responsibility for arbitration between objects with the same name in different schemes. However, features similar to the AFTER LOGON and ALTER SCHEMA triggers should be useful to you.