Ok, so the title is misleading. CF doesn't really have a concept of null, but it does have the concept of "not exists."
If you need to differentiate between when an argument of a function has been supplied or not, set the required attribute to true and leave the default attribute off. If the argument is not supplied to the function, then a against structKeyExists(arguments, "argumentName") will return false. If a value has been supplied, the function will return true.
Here's an example:
The output would be as follows:
There are times when using the default attribute to just supply a value is fine, but there are many times when you need to differentiate between when an argument was actually supplied or when it was not.