I like how this combines the logic for the nil checks and cloning into one place, and that it returns a non-nil object (an Unspecified singleton). However, in terms of naming, I find the way part and Unspecified are named to be a bit confusing. i.e. I had to thinking about what they mean

Perhaps it could be

    [file_path, class_name, method_name].
     map{|location_param| (location_param || Unspecified).clone }

to give a somewhat better name for the elements in the array, and only iterate over it once.

It would also be nice for the `unspecified` singleton to know what type of Unspecified it is.  Perhaps the @@locations hash could just know that by its position in the array.