Add support for custom property types.

Addresses #305 
- [x] Add tests
- [x] Add documentation