OK, I got the button to show up! This is kind of cool. There is some kind of initialization event notification for Zimlets now, as seen in this line of ZmComposeController.
js:
appCtxt.notifyZimlets("initializeToolbar", [this._app, tb, this, this.viewId], {waitUntilLoaded:true});
All I had to do was move my code into a method of my Zimlet named "initializeToolbar" and it got called at the right time and was passed references to the right app, controller, toolbar, and view id.
My_Zimlet.prototype.initializeToolbar =
function(app, toolbar, composeController, viewId) {
// check view id, apparently this event is fired for all toolbars, not just compose toolbar
if (viewId.indexOf(ZmId.VIEW_COMPOSE) == 0) {
// code for modifying the compose toolbar here
}
}