diff --git a/buildbot/clients/debug.py b/buildbot/clients/debug.py
index a73e543..06a116a 100644
--- a/buildbot/clients/debug.py
+++ b/buildbot/clients/debug.py
@@ -105,8 +105,9 @@ class DebugWidget:
             if revision == '':
                 revision = None
         reason = "debugclient 'Request Build' button pushed"
+        custom_props = {}
         d = self.remote.callRemote("requestBuild",
-                                   name, reason, branch, revision)
+                                   name, reason, branch, revision, custom_props)
         d.addErrback(self.err)
 
     def do_ping(self, widget):
diff --git a/buildbot/master.py b/buildbot/master.py
index 3787fa9..38b1124 100644
--- a/buildbot/master.py
+++ b/buildbot/master.py
@@ -227,11 +227,19 @@ class DebugPerspective(NewCredPerspective):
     def detached(self, mind):
         pass
 
-    def perspective_requestBuild(self, buildername, reason, branch, revision):
+    def perspective_requestBuild(self, buildername, reason, branch, revision, custom_props):
+        assert isinstance(custom_props, dict), \
+               "custom_props must be a dict (not %r)" % (custom_props,)
+
+        # Provide default values for any custom build properties the
+        # client did not send.
+        for propertyDict in (self.master.customBuildProperties or []):
+            custom_props.setdefault(propertyDict['propertyName'], "")
+
         c = interfaces.IControl(self.master)
         bc = c.getBuilder(buildername)
         ss = SourceStamp(branch, revision)
-        br = BuildRequest(reason, ss, buildername)
+        br = BuildRequest(reason, ss, custom_props, buildername)
         bc.requestBuild(br)
 
     def perspective_pingBuilder(self, buildername):
diff --git a/buildbot/process/base.py b/buildbot/process/base.py
index 4714c04..4f029cb 100644
--- a/buildbot/process/base.py
+++ b/buildbot/process/base.py
@@ -60,7 +60,8 @@ class BuildRequest:
         # TODO: remove the =None on builderName, it is there so I don't have
         # to change a lot of tests that create BuildRequest objects
         assert interfaces.ISourceStamp(source, None)
-        assert custom_props is not None, "custom_props must not be None"
+        assert isinstance(custom_props, dict), \
+               "custom_props must be a dict (not %r)" % (custom_props,)
         self.reason = reason
         self.source = source
         self.custom_props = custom_props

