I had to try this, and the code above actually works. First of all, if you use a custom widget make sure you have registered it on the widget_init hook. If you can see your widget among the available widgets then it is registered, so you don't have to worry about that.
I think the key for everything to come together is to get the name of the update_option right. This is the code that worked for me:
function childtheme_filter_preset_widgets( $preset_widgets ) {
$preset_widgets = array (
'primary-aside' => array( 'mytestwidget-2', 'pages-2', 'categories-2', 'archives-2' ),
'secondary-aside' => array( 'links-2', 'rss-links-2', 'meta-2' ),
);
return $preset_widgets;
}
add_filter('thematic_preset_widgets','childtheme_filter_preset_widgets');
function childtheme_override_init_presetwidgets() {
update_option( 'widget_mytestwidget', array( 2 => array( 'title' => '1st' ), '_multiwidget' => 1 ) );
update_option( 'widget_pages', array( 2 => array( 'title' => ''), '_multiwidget' => 1 ) );
update_option( 'widget_categories', array( 2 => array( 'title' => '', 'count' => 0, 'hierarchical' => 0, 'dropdown' => 0 ), '_multiwidget' => 1 ) );
update_option( 'widget_archives', array( 2 => array( 'title' => '', 'count' => 0, 'dropdown' => 0 ), '_multiwidget' => 1 ) );
update_option( 'widget_links', array( 2 => array( 'title' => ''), '_multiwidget' => 1 ) );
update_option( 'widget_rss-links', array( 2 => array( 'title' => ''), '_multiwidget' => 1 ) );
update_option( 'widget_meta', array( 2 => array( 'title' => ''), '_multiwidget' => 1 ) );
}
add_action( 'childtheme_override_presetwidgets', 'childtheme_override_init_presetwidgets' );
Where mytestwidget is the name of the widget you want to add (that would probably be the lowercase name of the widget class of your custom widget). The number is important. You can add several instances of the widget in your update_option like this
update_option( 'widget_mytestwidget', array( 2 => array( 'title' => '1st widget' ), 3 => array( 'title' => '2nd widget' ), '_multiwidget' => 1 ) );
And then you could place them in the sidebars with
$preset_widgets = array (
'primary-aside' => array( 'mytestwidget-2', 'pages-2', 'categories-2', 'archives-2' ),
'secondary-aside' => array( 'mytestwidget-3', 'links-2', 'rss-links-2', 'meta-2' ),
);