Index: src/wp-includes/rest-api/class-wp-rest-request.php
===================================================================
--- src/wp-includes/rest-api/class-wp-rest-request.php	(revision 39474)
+++ src/wp-includes/rest-api/class-wp-rest-request.php	(working copy)
@@ -828,7 +828,11 @@
 					continue;
 				}
 
-				$sanitized_value = call_user_func( $attributes['args'][ $key ]['sanitize_callback'], $value, $this, $key );
+				if ( isset( $attributes['args'][ $key ]['sanitize_callback_single_arg'] ) && true === $attributes['args'][ $key ]['sanitize_callback_single_arg'] ) {
+					$sanitized_value = call_user_func( $attributes['args'][ $key ]['sanitize_callback'], $value );
+				} else {
+					$sanitized_value = call_user_func( $attributes['args'][ $key ]['sanitize_callback'], $value, $this, $key );
+				}
 
 				if ( is_wp_error( $sanitized_value ) ) {
 					$invalid_params[ $key ] = $sanitized_value->get_error_message();
@@ -893,7 +897,11 @@
 			$param = $this->get_param( $key );
 
 			if ( null !== $param && ! empty( $arg['validate_callback'] ) ) {
-				$valid_check = call_user_func( $arg['validate_callback'], $param, $this, $key );
+				if ( isset( $arg['validate_callback_single_arg'] ) && true === $arg['validate_callback_single_arg'] ) {
+					$valid_check = call_user_func( $arg['validate_callback'], $param );
+				} else {
+					$valid_check = call_user_func( $arg['validate_callback'], $param, $this, $key );
+				}
 
 				if ( false === $valid_check ) {
 					$invalid_params[ $key ] = __( 'Invalid parameter.' );
Index: tests/phpunit/tests/rest-api/rest-request.php
===================================================================
--- tests/phpunit/tests/rest-api/rest-request.php	(revision 39474)
+++ tests/phpunit/tests/rest-api/rest-request.php	(working copy)
@@ -342,6 +342,25 @@
 		$this->assertEquals( 'rest_invalid_param', $valid->get_error_code() );
 	}
 
+	public function test_sanitize_callback_single_arg() {
+		$this->request->set_url_params( array(
+			'someinteger' => 'aaa',
+		) );
+
+		$this->request->set_attributes( array(
+			'args' => array(
+				'someinteger' => array(
+					'sanitize_callback' => 'is_numeric',
+					'sanitize_callback_single_arg' => true,
+				),
+			)
+		) );
+
+		$valid = $this->request->sanitize_params();
+		$this->assertTrue( $valid );
+		$this->assertEquals( false, $this->request->get_param( 'someinteger' ), 'Should return false instead of NULL when run through is_numeric' );
+	}
+
 	public function test_has_valid_params_required_flag() {
 		$this->request->set_attributes( array(
 			'args' => array(
@@ -380,6 +399,26 @@
 		$this->assertTrue( in_array( 'someotherinteger', $data['params'] ) );
 	}
 
+	public function test_validate_callback_single_arg() {
+		$this->request->set_url_params( array(
+			'someinteger' => 'aaa',
+		) );
+
+		$this->request->set_attributes( array(
+			'args' => array(
+				'someinteger' => array(
+					'validate_callback' => 'is_numeric',
+					'validate_callback_single_arg' => true,
+				),
+			)
+		) );
+
+		$valid = $this->request->has_valid_params();
+		$this->assertWPError( $valid, 'Should call is_numeric with one argument and fail validation' );
+	}
+
+
+
 	public function test_has_valid_params_validate_callback() {
 		$this->request->set_url_params( array(
 			'someinteger' => '123',
