I think you should be able to do that pretty easily by having different methods in your service contract which have differing response formats:
interface IYourService
{
[OperationContract]
[WebGet(UriTemplate="/YourMethod/XML", ResponseFormat=WebMessageFormat.Xml)]
SomeReturnObject YourMethodAsXml(.....);
[OperationContract]
[WebGet(UriTemplate="/YourMethod/JSON", ResponseFormat=WebMessageFormat.Json)]
SomeReturnObject YourMethodAsJson(.....);
}
and both methods could then call a common core function which does the actual computation / lookup of data or whatever you're doing.
No big config war invovled for this, I'd say.... and it would solve at least two of your three points (XML and JSON).
JSONP isn't natively supported in WCF - but as the article you referenced shows, you can fairly easily add this behavior. This does require some config wiring up, to enable this WCF extension, though. But it should be a one-time thing on your server, as far as I can see.
If you really can't deal with this config setup, you could of course derive a custom WebServiceHostFactoryWithJSONPSupport
from the WebServiceHostFactory
used for the WCF REST services, and add the necessary extensions (like service behaviors etc.) to your host factory. The class is not sealed, so that should be simple enough (at least in theory :-) ).