I have a question about the mining.set_difficult method.
In the example here
https://mining.bitcoin.cz/help/#!/manual/stratum-protocol
the first time the parameter here is a string (I would say it's the target), but the second time its a number.
Is it supposed to be a string only if it's a result to mining.subscribe or should the client handle both?
The first one is only in mining.subscribe, and is a subscription id - just ignore it.
Target is not supported by anything for mining.set_difficulty, as far as I know.
Another question is about the result to mining.subscribe. Can the result have an arbitrary number of [method, params] pairs or am I missing it completely?
Yes, an arbitrary number is possible.
Have you read
https://en.bitcoin.it/wiki/Stratum_mining_protocol ?