Base fieldtype validation working with model validation?
Completely untested and this whole pattern feels hacky to me, but something like this should work:

From your field type:

public function validate($value)
{
    if(is_array($value) &amp;&amp; $value['type'] != '')
    {
        // Validate the field type.
        $errors = parent::validate($value);

        if (!is_array($errors))
        {
            $errors = array();
        }

        $linkModel = $this-&gt;_valuetToModel($value);

        // Validate the model.
        $validated = $linkModel-&gt;validate();

        return $validated &amp;&amp; empty($errors) ? true : array_merge($linkModel-&gt;getAllErrors(), $errors);
    }

    return true;
}


From your model:

public function validate($attributes = null, $clearErrors = true)
{
    switch($this-&gt;type)
    {
        case('email'):
            if( !filter_var($this-&gt;value, FILTER_VALIDATE_EMAIL) )
            {
                $this-&gt;addError('value', Craft::t('Please enter a valid email address.'));
            }
            break;

        ....

    }

    return !$this-&gt;hasErrors();
}