Index: src/wp-includes/class-wp-site.php
===================================================================
--- src/wp-includes/class-wp-site.php	(revision 40430)
+++ src/wp-includes/class-wp-site.php	(working copy)
@@ -240,11 +240,15 @@
 			case 'siteurl':
 			case 'post_count':
 			case 'home':
+			default:
 				if ( ! did_action( 'ms_loaded' ) ) {
 					return null;
 				}
+
 				$details = $this->get_details();
-				return $details->$key;
+				if ( isset( $details->$key ) ) {
+					return $details->$key;
+				}
 		}
 
 		return null;
@@ -275,6 +279,15 @@
 					return false;
 				}
 				return true;
+			default:
+				if ( ! did_action( 'ms_loaded' ) ) {
+					return false;
+				}
+
+				$details = $this->get_details();
+				if ( isset( $details->$key ) ) {
+					return true;
+				}
 		}
 
 		return false;
Index: tests/phpunit/tests/multisite/siteDetails.php
===================================================================
--- tests/phpunit/tests/multisite/siteDetails.php	(revision 40430)
+++ tests/phpunit/tests/multisite/siteDetails.php	(working copy)
@@ -144,6 +144,25 @@
 
 		$this->assertNotFalse( $cached_details );
 	}
+
+	/**
+	 * @ticket 40458
+	 */
+	public function test_site_details_filter_with_custom_value() {
+		add_filter( 'site_details', array( $this, '_filter_site_details_custom_value' ) );
+		$site = get_site();
+		$custom_value_isset = isset( $site->custom_value );
+		$custom_value = $site->custom_value;
+		remove_filter( 'site_details', array( $this, '_filter_site_details_custom_value' ) );
+
+		$this->assertTrue( $custom_value_isset );
+		$this->assertSame( 'foo', $custom_value );
+	}
+
+	public function _filter_site_details_custom_value( $details ) {
+		$details->custom_value = 'foo';
+		return $details;
+	}
 }
 
 endif;
