Index: screen.php
===================================================================
--- screen.php	(revision 19736)
+++ screen.php	(working copy)
@@ -135,7 +135,7 @@
  * 	which it uses to determine an icon HTML ID. Or, if a string is provided, it is used to form the icon HTML ID.
  */
 function screen_icon( $screen = '' ) {
-	echo get_screen_icon( $screen );
+	echo apply_filters ( 'wp_screen_icon' , get_screen_icon( $screen ) );
 }
 
 /**
@@ -148,10 +148,21 @@
  * @return string HTML for the screen icon.
  */
 function get_screen_icon( $screen = '' ) {
+	$style = '';
 	if ( empty( $screen ) )
 		$screen = get_current_screen();
 	elseif ( is_string( $screen ) )
 		$icon_id = $screen;
+	elseif ( is_array( $screen ) ) {
+		/*
+			$screen = array (
+				'name' => 'custom' ,
+				'icon' => 'URL',
+			);
+		*/
+		$icon_id = isset ( $screen['name'] ) ? $screen['name'] : 'custom';
+		$style = ' style="background:transparent url(' . $screen['icon'] . ') no-repeat;"';
+	}
 
 	$class = 'icon32';
 
@@ -168,7 +179,7 @@
 			$class .= ' ' . sanitize_html_class( 'icon32-posts-' . $screen->post_type );
 	}
 
-	return '<div id="icon-' . esc_attr( $icon_id ) . '" class="' . $class . '"><br /></div>';
+	return apply_filters ( 'wp_get_screen_icon' , '<div id="icon-' . esc_attr( $icon_id ) . '" class="' . $class . '"' . $style .'><br /></div>' , $screen );
 }
 
 /**
