it's not pretty clear to non-hardcore developers how to create a PersistentField
as proposed in your answer; I checked the source but a pattern is not obvious.
here's an alternate solution for people using z3c.form
based forms and plone.autoform
instead:
from plone.app.z3cform.wysiwyg import WysiwygFieldWidget
from plone.autoform import directives as form
from plone.supermodel import model
from zope import schema
class IDisclaimerSettings(model.Schema):
...
form.widget('text', WysiwygFieldWidget)
text = schema.Text(
title=_(u'Body text'),
description=_(u'The text of the disclaimer.'),
required=True,
)