Hello,
Instead of wainting for 10.1 and the Silverlight 3.0 API, I decided to create my own process. I would post the source-code, but I don't beleive I have the leagal authority to do so I'll do my best to explain my process; this only works if you have access to the server hosting ArcGIS Server.
I summary here is what I did.
1. I created a directory containg empty MXDs but with the pagelayout defined. For example: 8x11.mxd, 11x17.mxd, etc..
2. I created a directory with layer files matching each map service I publised.
3. I then created a python script that accepts some parameters like, the extent of the map, the mxd name, and a JSON object of layer ids that correspond to the layers I created in step two, the array of visible layer ids, and a definition query for each layer if needed. When the script executes, it opens the appropraite mxd, loads the appropriate .lyr file(s), and then itterates to the layers in the .lyr file and sets the visiblity and definition query. All of this data is passed to the sciprt in JSON.
4. I published this script as a GPProcess so I can access it via the Silverlight API.
5. On the client, Silverilght, I loop through all the layers in the map control to see which ones are visible. If a layer is visible, I capture the ID of that layer, which corresponds to a .lyr file on the server, get the array of VisibleLayers, and the collection of LayerDefinitions.
6. Then I send all of this data back to the Server along with the map extent, the scale , and the pagelayout, again this matches the mxd I created in step 1.
7. The Python script attached to the GPProcess, takes this information and creates a PDF.
The challengs is creating the script and sending the data to it.
I didn't do all of this in one shot. I stared out by creating a simple script and exports a PDF and sends the url back to the clint. Once I figured that out, I expanded to accepting mxd names, etc.
Jason