This seems generally okay. Do you want to try to add pump support as a follow up? It shouldn't be too different from e.g. 0d457b2ce285e9964e88eed0b5e051197d8fc854 and 696071af7a3b6ec835d0dbc5cc37e80d9c836f62, except the implementation of the processor returned by D3DX10CreateAsyncShaderPreprocessProcessor() should amount to little more than a call to D3DPreprocess().
This could also use some tests.