Supplement :type in `defcustom`
Add hooks and better error notification.