Thank you Larry,
I was thinking of a design more along the line of this sample but I'm interested in giving your method a try. I've copied over Anvil and see the default greeting as expected when I run my app.
I've looked over your Acme widget, it looks like I need to copy over _onWidgetLoaded, _modifyWidgets, _modifyWidget and _processBookmark functions as well as BookmarkPlus/images/. I'm having trouble stepping any further in to it than _onWidgetLoaded as array.indexOf(this.widgetNamesToProcess, widget.label) is always -1 in _onWidgetLoaded and therefore never moves on to _modifyWidget (though I do get each widget label as each widget is created). Might I be missing something obvious?