Now that I think about it, I like the idea of individual Widgets being able to hide certain properties (by not returning them) if they want to. Maybe a Widget is required to be hidden until some event, etc.
It might be more complicated than what I just said, but whether we allow that or not, I think your code is fine the way it is.