Index: wp-includes/functions.wp-scripts.php
===================================================================
--- wp-includes/functions.wp-scripts.php	(revision 18444)
+++ wp-includes/functions.wp-scripts.php	(working copy)
@@ -47,9 +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 )
 		$wp_scripts->add_data( $handle, 'group', 1 );
@@ -65,8 +66,10 @@
  */
 function wp_localize_script( $handle, $object_name, $l10n ) {
 	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->localize( $handle, $object_name, $l10n );
 }
@@ -79,8 +82,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 );
 }
@@ -95,8 +100,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);
@@ -115,8 +122,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 );
 }
@@ -135,8 +144,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/script-loader.php
===================================================================
--- wp-includes/script-loader.php	(revision 18444)
+++ wp-includes/script-loader.php	(working copy)
@@ -793,6 +793,19 @@
 	}
 }
 
+/**
+ * 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();
+	}
+}
+
+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' );
