Index: wp-includes/media.php
===================================================================
--- wp-includes/media.php	(revision 11997)
+++ wp-includes/media.php	(working copy)
@@ -568,10 +568,16 @@
  * The supported attributes for the shortcode are 'id', 'align', 'width', and
  * 'caption'.
  *
+ * If the image's alternative text is identical to the caption text, the alt
+ * text will be removed (as alt="") unless you pass TRUE via the
+ * 'wp_img_caption_print_duplicate_alt' filter hook
+ *
  * @since 2.6.0
  *
  * @param array $attr Attributes attributed to the shortcode.
  * @param string $content Optional. Shortcode content.
+ * @uses apply_filters() Calls 'img_caption_shortcode' filter
+ * @uses apply_filters() Calls 'wp_img_caption_print_duplicate_alt' filter
  * @return string
  */
 function img_caption_shortcode($attr, $content = null) {
@@ -593,6 +599,12 @@
 
 	if ( $id ) $id = 'id="' . esc_attr($id) . '" ';
 
+	if ( ! apply_filters( 'wp_img_caption_print_duplicate_alt', false ) ) {
+		// alt text is removed if identical to printed caption
+		$content = str_replace( sprintf( 'alt="%s"', esc_attr($caption) )
+			, 'alt=""', $content );
+	}
+
 	return '<div ' . $id . 'class="wp-caption ' . esc_attr($align) . '" style="width: ' . (10 + (int) $width) . 'px">'
 	. do_shortcode( $content ) . '<p class="wp-caption-text">' . $caption . '</p></div>';
 }
