Please add spaces here, as per the [styleguide](http://ellislab.com/codeigniter/user-guide/general/styleguide.html#logical_operators):

    if ( ! is_array($colors))

Also, since all of the keys are required, this is a good place to do some validation:

    if ( ! is_array($colors) OR ! isset($colors['bg_color'], $colors['border_color'], $colors['text_color'], $colors['grid_color'], $colors['shadow_color']))

While writing the above code, another thing comes to mind ... why append that '_color' suffix to all keys, since all of them are clearly colors. Wouldn't 'background', 'border', 'text', etc. be simpler/better? :)