Index: wp-includes/post.php
===================================================================
--- wp-includes/post.php	(revision 20726)
+++ wp-includes/post.php	(working copy)
@@ -29,6 +29,7 @@
 		'hierarchical' => false,
 		'rewrite' => false,
 		'query_var' => false,
+		'delete_with_user' => true,
 		'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'post-formats' ),
 	) );
 
@@ -45,6 +46,7 @@
 		'hierarchical' => true,
 		'rewrite' => false,
 		'query_var' => false,
+		'delete_with_user' => true,
 		'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'page-attributes', 'custom-fields', 'comments', 'revisions' ),
 	) );
 
@@ -63,7 +65,8 @@
 		'rewrite' => false,
 		'query_var' => false,
 		'show_in_nav_menus' => false,
-		'supports' => array( 'comments' ),
+		'delete_with_user' => true,
+		'supports' => array( 'comments', 'author' ),
 	) );
 
 	register_post_type( 'revision', array(
@@ -80,6 +83,8 @@
 		'rewrite' => false,
 		'query_var' => false,
 		'can_export' => false,
+		'delete_with_user' => true,
+		'supports' => array( 'author' ),
 	) );
 
 	register_post_type( 'nav_menu_item', array(
@@ -91,6 +96,7 @@
 		'_builtin' => true, /* internal use only. don't use this when registering your own post type. */
 		'hierarchical' => false,
 		'rewrite' => false,
+		'delete_with_user' => false,
 		'query_var' => false,
 	) );
 
Index: wp-admin/includes/user.php
===================================================================
--- wp-admin/includes/user.php	(revision 20725)
+++ wp-admin/includes/user.php	(working copy)
@@ -243,11 +243,21 @@
 	do_action('delete_user', $id);
 
 	if ( 'novalue' === $reassign || null === $reassign ) {
-		$post_ids = $wpdb->get_col( $wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_author = %d", $id) );
+		$post_types_to_delete = array();
+		foreach ( get_post_types( array(), 'objects' ) as $post_type ) {
+			if ( $post_type->delete_with_user ) {
+				$post_types_to_delete[] = $post_type->name;
+			} elseif ( null === $post_type->delete_with_user && post_type_supports( $post_type->name, 'author' ) ) {
+				$post_types_to_delete[] = $post_type->name;
+			}
+		}
 
+		$post_types_to_delete = apply_filters( 'post_types_to_delete_with_user', $post_types_to_delete, $id );
+		$post_types_to_delete = implode( "', '", $post_types_to_delete );
+		$post_ids = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_author = %d AND post_type IN ('$post_types_to_delete')", $id ) );
 		if ( $post_ids ) {
 			foreach ( $post_ids as $post_id )
-				wp_delete_post($post_id);
+				wp_delete_post( $post_id, true);
 		}
 
 		// Clean links
