a) Will the query not resolve without additional qualification?
b) This may be difficult to do positionally, would you be using the options clause?
c) This can be done without directly manipulating the query. If you add the metadata for the functions to be replaced as UDFs and add support for them at the translator level via the getSupportedFunctions method, they will be pushed down and can be handled at the translator level - see the FunctionModifier class usage.
And in general there's an approach similar to c that is to direct the query as a pushdown to a fronting Teiid vdb so that you can just manipulate the pushdown command and have that submitted to you actual vdb that performs the desired federation.
Otherwise we have an unofficial hook to modify the command in the internal form via a custom AuthorizationValidator - that has access to the raw instance. However this is the already parsed/resolved query. If you need access to just the string form you may want to consider just using proxy of other interception logic on the the client side.