The exclamation points are used within the field names in the Field Calculator, but would not be needed within the function definition.

You can go two routes with this. Possibly the faster option (depending on the number of rows) would be to use Select By Attributes to select the rows with a blank Label field. Then use field calculator with the definition =!FULLNAME!. This will only process on the selected rows.

If you wish to use just the Field Calculator without first selecting the rows by attribute, you will need to use a code block. The code block's "Pre-Logic Script Code" would contain your function definition, e.g. 

    def updateLabel(lbl, fname):
        if lbl is None:
            return fname

For the actual field calcution, call the function with the fields as input.

    updateLabel(!label!, !FULLNAME!)

The answer to [this related question][1] shows screenshots of the Field Calculator and code blocks, and gives a deeper explanation of the use of exclamation points within this tool.


  [1]: https://gis.stackexchange.com/questions/116263/meaning-of-exclamation-mark-in-python-parser-of-arcgis-field-calculator