diff --git src/wp-admin/options-discussion.php src/wp-admin/options-discussion.php
index fefc0d8..1c715a8 100644
--- src/wp-admin/options-discussion.php
+++ src/wp-admin/options-discussion.php
@@ -217,18 +217,48 @@
 <th scope="row"><?php _e('Default Avatar'); ?></th>
 <td class="defaultavatarpicker"><fieldset><legend class="screen-reader-text"><span><?php _e('Default Avatar'); ?></span></legend>
 
-<?php _e('For users without a custom avatar of their own, you can either display a generic logo or a generated one based on their email address.'); ?><br />
-
 <?php
-$avatar_defaults = array(
+
+$static_avatars = array(
 	'mystery' => __('Mystery Person'),
 	'blank' => __('Blank'),
-	'gravatar_default' => __('Gravatar Logo'),
+	'gravatar_default' => __('Gravatar Logo')
+);
+
+$avatar_generated =	array(
 	'identicon' => __('Identicon (Generated)'),
 	'wavatar' => __('Wavatar (Generated)'),
 	'monsterid' => __('MonsterID (Generated)'),
 	'retro' => __('Retro (Generated)')
 );
+
+/**
+ * Filters the generated avatars.
+ *
+ * Avatars are stored in key/value pairs, where the key is option value,
+ * and the name is the displayed avatar name.
+ *
+ * @since 4.8.0
+ *
+ * @param array $avatar_generated Array of default avatars.
+ */
+$static_avatars = apply_filters( 'default_static_avatars', $static_avatars );
+
+/**
+ * Filters the generated avatars.
+ *
+ * Avatars are stored in key/value pairs, where the key is option value,
+ * and the name is the displayed avatar name.
+ *
+ * @since 4.8.0
+ *
+ * @param array $avatar_generated Array of default avatars.
+ */
+$avatar_generated = apply_filters( 'default_generated_avatars', $avatar_generated );
+
+// Merge the two avatar types together
+$avatar_defaults = array_merge( $static_avatars, $avatar_generated );
+
 /**
  * Filters the default avatars.
  *
@@ -239,14 +269,38 @@
  *
  * @param array $avatar_defaults Array of default avatars.
  */
-$avatar_defaults = apply_filters( 'avatar_defaults', $avatar_defaults );
+$new_avatar_defaults = apply_filters( 'avatar_defaults', $avatar_defaults );
+
+if ( array_intersect_key( $new_avatar_defaults, $avatar_generated ) ) {
+	$default_avatar_help = __( 'For users without a custom avatar of their own, you can either display a generic logo or a generated one based on their email address.');
+} else {
+	$default_avatar_help = __( 'For users without a custom avatar of their own, you can display a generic logo instead.');
+}
+
+/**
+ * Filters the help text used for default avatars.
+ *
+ * Avatars are stored in key/value pairs, where the key is option value,
+ * and the name is the displayed avatar name.
+ *
+ * @since 4.8.0
+ *
+ * @param array $default_avatar_help Array of default avatars.
+ */
+$default_avatar_help = apply_filters( 'default_avatar_help', $default_avatar_help );
+
+// Maybe output default avatar help text
+if ( ! empty( $default_avatar_help ) ) {
+	echo '<p><label for="avatar_default">'. $default_avatar_help . '</label></p>';
+}
+
 $default = get_option( 'avatar_default', 'mystery' );
 $avatar_list = '';
 
 // Force avatars on to display these choices
 add_filter( 'pre_option_show_avatars', '__return_true', 100 );
 
-foreach ( $avatar_defaults as $default_key => $default_name ) {
+foreach ( $new_avatar_defaults as $default_key => $default_name ) {
 	$selected = ($default == $default_key) ? 'checked="checked" ' : '';
 	$avatar_list .= "\n\t<label><input type='radio' name='avatar_default' id='avatar_{$default_key}' value='" . esc_attr($default_key) . "' {$selected}/> ";
 	$avatar_list .= get_avatar( $user_email, 32, $default_key, '', array( 'force_default' => true ) );
