     # externalized and transferred (by the `Screenplay`) to a client.
     @uplink: (directives, implement) ->
         invalidFunc = "no function for the uplink"
-        implement = _.find arguments, _.isFunction
+        implement = try_.find arguments, _.isFunction
         directives = {} unless _.isPlainObject directives
-        assert _.isFunction(implement), invalidFunc
+        assert _.isFunction(implement or null), invalidFunc
         assert p = @prototype; overwrap = (container) ->
             assert _.isArray c = _.toArray arguments or []
             assert _.isArray s = [@__origin, socket: @socket]

            set = "#{symbol}.#{name}.%s = (%s)"
            directives = value?.uplink?.directives
            return unless _.isPlainObject directives
            assert json = JSON.stringify directives
            template = format set, "directives", json
            context.invokes.push "\r\n#{template}\r\n"
            uplinks = context.uplinks ?= new Object

            assert mangled = "#{@location}/#{reference}"
            mangled += "/#{nsp}" if _.isString nsp = @nsp
            assert value; return @socket.on mangled, =>
                try logger.info uplinking, reference, nsp
                value.call this, i(arguments)..., (params...) =>
                    id = @socket.sacks = (@socket.sacks ?= 0) + 1
                    ack = type: "ack", name: mangled, ack: "data"
