Index: wp-includes/functions.wp-scripts.php
===================================================================
--- wp-includes/functions.wp-scripts.php	(revision 18542)
+++ wp-includes/functions.wp-scripts.php	(working copy)
@@ -47,8 +47,10 @@
  */
 function wp_register_script( $handle, $src, $deps = array(), $ver = false, $in_footer = false ) {
 	global $wp_scripts;
-	if ( !is_a($wp_scripts, 'WP_Scripts') )
+	if ( !is_a($wp_scripts, 'WP_Scripts') ) {
+		_doing_it_wrong( __FUNCTION__, __( '$wp_scripts should not be accessed before init hook.' ), '3.3' );
 		$wp_scripts = new WP_Scripts();
+	}
 
 	$wp_scripts->add( $handle, $src, $deps, $ver );
 	if ( $in_footer )
@@ -75,8 +77,10 @@
  */
 function wp_localize_script( $handle, $name, $data ) {
 	global $wp_scripts;
-	if ( !is_a($wp_scripts, 'WP_Scripts') )
+	if ( !is_a($wp_scripts, 'WP_Scripts') ) {
+		_doing_it_wrong( __FUNCTION__, __( '$wp_scripts should not be accessed before init hook.' ), '3.3' );
 		return false;
+	}
 
 	return $wp_scripts->add_script_data( $handle, $name, $data );
 }
@@ -89,8 +93,10 @@
  */
 function wp_deregister_script( $handle ) {
 	global $wp_scripts;
-	if ( !is_a($wp_scripts, 'WP_Scripts') )
+	if ( !is_a($wp_scripts, 'WP_Scripts') ) {
+		_doing_it_wrong( __FUNCTION__, __( '$wp_scripts should not be accessed before init hook.' ), '3.3' );
 		$wp_scripts = new WP_Scripts();
+	}
 
 	$wp_scripts->remove( $handle );
 }
@@ -105,8 +111,10 @@
  */
 function wp_enqueue_script( $handle, $src = false, $deps = array(), $ver = false, $in_footer = false ) {
 	global $wp_scripts;
-	if ( !is_a($wp_scripts, 'WP_Scripts') )
+	if ( !is_a($wp_scripts, 'WP_Scripts') ) {
+		_doing_it_wrong( __FUNCTION__, __( '$wp_scripts should not be accessed before init hook.' ), '3.3' );
 		$wp_scripts = new WP_Scripts();
+	}
 
 	if ( $src ) {
 		$_handle = explode('?', $handle);
@@ -125,8 +133,10 @@
  */
 function wp_dequeue_script( $handle ) {
 	global $wp_scripts;
-	if ( !is_a($wp_scripts, 'WP_Scripts') )
+	if ( !is_a($wp_scripts, 'WP_Scripts') ) {
+		_doing_it_wrong( __FUNCTION__, __( '$wp_scripts should not be accessed before init hook.' ), '3.3' );
 		$wp_scripts = new WP_Scripts();
+	}
 
 	$wp_scripts->dequeue( $handle );
 }
@@ -145,8 +155,10 @@
  */
 function wp_script_is( $handle, $list = 'queue' ) {
 	global $wp_scripts;
-	if ( !is_a($wp_scripts, 'WP_Scripts') )
+	if ( !is_a($wp_scripts, 'WP_Scripts') ) {
+		_doing_it_wrong( __FUNCTION__, __( '$wp_scripts should not be accessed before init hook.' ), '3.3' );
 		$wp_scripts = new WP_Scripts();
+	}
 
 	$query = $wp_scripts->query( $handle, $list );
 
Index: wp-includes/functions.wp-styles.php
===================================================================
--- wp-includes/functions.wp-styles.php	(revision 18542)
+++ wp-includes/functions.wp-styles.php	(working copy)
@@ -70,8 +70,10 @@
  */
 function wp_register_style( $handle, $src, $deps = array(), $ver = false, $media = 'all' ) {
 	global $wp_styles;
-	if ( !is_a($wp_styles, 'WP_Styles') )
+	if ( !is_a($wp_styles, 'WP_Styles') ) {
+		_doing_it_wrong( __FUNCTION__, __( '$wp_styles should not be accessed before init hook.' ), '3.3' );
 		$wp_styles = new WP_Styles();
+	}
 
 	$wp_styles->add( $handle, $src, $deps, $ver, $media );
 }
@@ -87,8 +89,10 @@
  */
 function wp_deregister_style( $handle ) {
 	global $wp_styles;
-	if ( !is_a($wp_styles, 'WP_Styles') )
+	if ( !is_a($wp_styles, 'WP_Styles') ) {
 		$wp_styles = new WP_Styles();
+		_doing_it_wrong( __FUNCTION__, __( '$wp_styles should not be accessed before init hook.' ), '3.3' );
+	}
 
 	$wp_styles->remove( $handle );
 }
@@ -114,8 +118,10 @@
  */
 function wp_enqueue_style( $handle, $src = false, $deps = array(), $ver = false, $media = 'all' ) {
 	global $wp_styles;
-	if ( !is_a($wp_styles, 'WP_Styles') )
+	if ( !is_a($wp_styles, 'WP_Styles') ) {
 		$wp_styles = new WP_Styles();
+		_doing_it_wrong( __FUNCTION__, __( '$wp_styles should not be accessed before init hook.' ), '3.3' );
+	}
 
 	if ( $src ) {
 		$_handle = explode('?', $handle);
@@ -132,8 +138,10 @@
  */
 function wp_dequeue_style( $handle ) {
 	global $wp_styles;
-	if ( !is_a($wp_styles, 'WP_Styles') )
+	if ( !is_a($wp_styles, 'WP_Styles') ) {
 		$wp_styles = new WP_Styles();
+		_doing_it_wrong( __FUNCTION__, __( '$wp_styles should not be accessed before init hook.' ), '3.3' );
+	}
 
 	$wp_styles->dequeue( $handle );
 }
@@ -152,8 +160,10 @@
  */
 function wp_style_is( $handle, $list = 'queue' ) {
 	global $wp_styles;
-	if ( !is_a($wp_styles, 'WP_Styles') )
+	if ( !is_a($wp_styles, 'WP_Styles') ) {
 		$wp_styles = new WP_Styles();
+		_doing_it_wrong( __FUNCTION__, __( '$wp_styles should not be accessed before init hook.' ), '3.3' );
+	}
 
 	$query = $wp_styles->query( $handle, $list );
 
Index: wp-includes/script-loader.php
===================================================================
--- wp-includes/script-loader.php	(revision 18542)
+++ wp-includes/script-loader.php	(working copy)
@@ -765,9 +765,35 @@
 	}
 }
 
+/**
+ * Initializes $wp_scripts global (if it hasn't already been initialized by a faulty plugin or theme).
+ *
+ * @since 3.3
+ */
+function wp_scripts_init() {
+	global $wp_scripts;
+
+	if ( !is_a($wp_scripts, 'WP_Scripts') )
+		$wp_scripts = new WP_Scripts();
+}
+
+/**
+ * Initializes $wp_styles global (if it hasn't already been initialized by a faulty plugin or theme).
+ *
+ * @since 3.3
+ */
+function wp_styles_init() {
+	global $wp_styles;
+
+	if ( !is_a($wp_styles, 'WP_Styles') )
+		$wp_styles = new WP_Styles();
+}
+
+add_action( 'init', 'wp_scripts_init', 0 ); // highest priority 
 add_action( 'wp_default_scripts', 'wp_default_scripts' );
 add_filter( 'wp_print_scripts', 'wp_just_in_time_script_localization' );
 add_filter( 'print_scripts_array', 'wp_prototype_before_jquery' );
 
+add_action( 'init', 'wp_styles_init', 0 ); // highest priority 
 add_action( 'wp_default_styles', 'wp_default_styles' );
 add_filter( 'style_loader_src', 'wp_style_loader_src', 10, 2 );
