You have to carefully read the documentation of the functions that use/generate normalized frequency in some cases they use $fs$ and in others they use $f_s/2$.
The Mathworks docuementation for firpmord:
[n,fo,ao,w] = firpmord(f,a,dev) returns the approximate order n, normalized frequency band edges fo, frequency band amplitudes ao, and weights w that meet input specifications f, a, and dev.
 = firpmord(,fs) specifies a sampling frequency fs. fs defaults to 2 Hz, implying a Nyquist frequency of 1 Hz. You can specify band edges scaled to a particular application's sample rate. You can use this with any of the previous input syntaxes."
In this case the maximum frequency that can be given in the f vector is 1.0 which corresponds to $f_s$. This is likely because the Matlab code is designing real (not complex) filters and you can only specify the response from 0 -> $f_s/2$ since the other half will be determined by conjugate symmetry.
It can be confusing - looking at Matlab's Remez and Remezord functions, they tend to say they normalize by the Nyquist frequency (they mean $f_s/2$) but they don't explicitly tell you that. Looking at the graphs of the filter responses in their examples in the documentation does make it clear - they show only half the frequency range and the maximum frequency is 1.0 (meaning it has been normalized by $f_s/2$.
In other code, e.g. ones that deal with complex filters, you may see the normalization use $f_s$, because you no longer have the conjugate symmetry you can specify the response over the whole frequency range (0-> $f_s$).
So it really depends. There are really two conventions for normalized frequency and you have to read the documentation or ask what whether they've normalized by $f_s$ or $f_s/2$.