I wrote this reply for another thread, and I think Konstantin saw it there, but other users may find this helpful:

There are lots of options when replacing an appearance. If making the change across your entire app, you should be using a replace-with in your module file. If making the change for every instance in a single uibinder class, a zero-arg @UiFactory method can work (or one that takes an appearance arg like this example). If making a change for each instance within a uibinder class, consider creating the instances ahead of time in code, by specifying @UiField(provided = true) and creating the instance in the field.

One more option for occasional reuse - make a subclass of the widget, with a no-arg constructor, calling the super constructor with a specific appearance. This is what is done in FramedPanel for a framed ContentPanel.