I don't like the way you write the namespace 'self'. One could add anything to the object. For example

```python
def foo():
  print 'foo'
c = ConfigVariable(foo=foo)
c.foo()
```

Also, you do not get the expected exception, if you make a spelling mistake. Normally, I get a TypeError with the message "__init__() got an unexpected keyword argument". Or I get the message, "__init__() takes at least 2 arguments (0 given)". These error messages are well-known and every python developer knows what do do. 
But you use a NotImplementedError, which is for abstract classes and has nothing to do with keywords.

Please stay with the standard and use def __init__(self, name, default_value, form_field=None):