How to deal with PHP Fatal error: Cannot unset string offsets in field.default.inc when implementing custom widget?
hook_node_validate was how I was able to fix this issue.

function MODULE_node_validate($node, $form, &amp;$form_state)
{
    foreach ($form as $field =&gt; $field_data)
    {
        $field_info    = field_info_field($field);
        $instance_info = field_info_instance("node", $field, "CONTENT_TYPE");

        // since this field returns a string when an array is required, we need to correct
        // the data here before it goes any further.
        if ($instance_info["widget"]["type"] == "MODULE_taxonomy_autocomplete")
        {
            // Recieved: string
            // Expecting: array(array("tid" =&gt; TID),)
            $tag_names = explode(",", $form_state["values"][$field][$node-&gt;language]);
            $form_state["values"][$field][$node-&gt;language] = array();
            foreach ($tag_names as $tag)
            {
                $term = taxonomy_get_term_by_name($tag, $field_info["settings"]["allowed_values"][0]["vocabulary"]);
                $term = array_shift($term);

                $form_state["values"][$field][$node-&gt;language][] = array("tid" =&gt; $term-&gt;tid);
            }
        }
    }
}