Question: is it at all possible to 'pre-proccess' in XSLT?

with preprocessing i mean updating the (in memory representation) of the source tree.

is this possible, or do i need to do multiple transforms for it.

use case:
we have Docbook reference manuals for out clients but for certain clients these need different 'skins' (different images etc). so what i was hoping to do is transform the image *fileref* path depending on a parameter. then apply the rest of the normal Docbook XSL templates.

Answer: 
This is not possible with standards compliant XSLT 1.0. It is possible in every actual implementation I've used, however. The extensions with which to do that differ by engine, however. It is also possible in standard XSLT 2.0 (which is in any case much easier to work with - so if you can, just use that).

If your xslt processor supports [EXSLT](http://exslt.org/), the [exsl:node-set()](http://exslt.org/exsl/functions/node-set/index.html) function does what you're looking for. msxml has an identically named extension function as well (but with a different namespace uri, the functions are unfortunately not trivially compatible).
Maybe you should use XSLT "OOP" methods here. Put all the common templates to all clients in a stylesheet, and create an stylesheet for each client with specific templates overriding common ones. Import the common stylesheet within the specific ones with xsl:import, and you'll do only one processing by calling the stylesheet corresponding to a client.