OK, I found the problem. I wasn't actually returning the OptionsWidget.widget object during form creation. I was returning a LOAD helper which then inserted the OptionsWidget.widget object at a second stage. It looks like the accepts() method looks at the *widgets returned during form building* to establish the fields it will validate.
I've worked around this by returning the OptionsWidget.widget object wrapped in a named SPAN at initial form creation. Instead of using a LOAD helper, I'm just using the cid parameter of a link to refresh the content of that span via ajax. It actually works out simpler in the end too. (satisfied sigh). I'm still wondering why the accepts() method works this way, though.

