Found an answer myself after realizing I made the mistake everyone warned me about: the placement of \ProcessOptions, or, in my case \ProcessOptionsX, since I'm using the xkeyval package.
I used the following bit if code to assign values to some variables in order to distinguish the three document types (for simplicity I'll call them A, B and C):
\def\A{A} % creates macro named A (not sure if this value matters)
\def\B{B} % creates macro named B
\def\C{C} % creates macro named C
I did that in order to later use the \ifx command and compare two macros. Now, using the xkeyval package's syntax to create package options:
\makeatletter
\define@key{fam}{documenttype}{%
\ifthenelse{\equal{#1}{A}}{% if user types: documenttype=A
\def\documenttype{A}}{% assigns value "A" to \documenttype macro
\relax % not sure if needed
}
\ifthenelse{\equal{#1}{B}}{% if user types: documenttype=B
\def\documenttype{B}}{% assigns value "B" to \documenttype macro
\relax % not sure if needed
}
\ifthenelse{\equal{#1}{C}}{% if user types: documenttype=C
\def\documenttype{C}}{% assigns value "C" to \documenttype macro
\relax % not sure if needed
}
}
\makeatother
\ProcessOptionsX<fam>\relax
Great, now the macro \documenttype has a value defined by the user. Now, we can write codes that will be compiled only when the user has specified a certain value to documenttype, using \ifx.
\ifx \documenttype \A % check if \documenttype is equal to \A
% insert commands for when user chooses A
\else % not sure if needed
\relax % not sure if needed
\fi
\ifx \documenttype \B % check if \documenttype is equal to \B
% insert commands for when user chooses B
\else % not sure if needed
\relax % not sure if needed
\fi
\ifx \documenttype \C % check if \documenttype is equal to \C
% insert commands for when user chooses C
\else % not sure if needed
\relax % not sure if needed
\fi
% exactly HERE is where I was placing \ProcessOptionsX, shame on me!!
That's it! Now I can use any booleans!!