Kernel and user threads are distinct on Solaris. The implementation of doors is not by message passing. There needs to be a userland thread context in the server process with a thread control block and all the other things that the userland threading system depends on to provide things like thread-local variables (which include such essentials as errno).
I do not know whether there is a full kernel thread (or LWP as they call it in Solaris), but a thread is primarily a schedulable entity, and if the transfer of control is such that the activated server thread is treated in the same way in terms of scheduling as the requesting client thread, then effectively it is still what it says it is.