Hi Joe and James,
You are pretty much correct on your assumptions here, and the Theme designer is a great tool to verify that you are.
The way this works is that if you create a custom control with some specific XSLT, that is the default XSLT that would be used for that control, until it's themed, meaning that if you don't change it in your theme, the default control's data will be used.
You can see the default XSLT inside of the Default theme, where you can get a copy of it if needed.
When you do want to change the XSLT of a TextBox for instance, for your custom control, you have to use some property (or other means) of distinguishing between the standard TextBox (or other derivatives) and your own custom control.... more precisely, you want your new XSLT to only apply to your control. The most usual method to do this, is to use CustomStyle property. See more on the Custom controls wiki page.
You can also use the "Skinable Controls" item templates for this. You should find them if you add new item to the solution explorer, and they should be in a folder below the Visual WebGui item templates. The skinable controls provide you with a skeleton to call some predifined XSLT templates with parameters you can adjust, or you can change the XSLT completely. The skinable controls use CustomStyle to distinguish between controls.
Hope this helps,
Palli