In case you're having difficulties doing something custom (as I have been!), then you might like to know this.
It appears that if you're using the WP Object Cache (define('ENABLE_CACHE', true); define('WP_CACHE', true); in your wp-config.php) then you need to serialize arrays *before* passing them to update_blog_option($id, $array);
As demonstrated by a quick test;
<?php
require_once 'wp-blog-header.php';
$foo = array('this'=>'that', 'foo'=>'bar');
update_blog_option(2, 'serial_foo', serialize($foo));
print_r(get_blog_option(2, 'serial_foo'));
update_blog_option(2, 'foo', $foo);
print_r(get_blog_option(2, 'foo'));
?>
This appears to be because the cache-handling code automatically does some serialization/unserialization - I haven't looked too deeply into it, just figured out that this was required to make it work.
HTH someone.
Beau