The basic feature of a keyvalue interface is not just to provide the keys and assign some values to them but also to store the key values and process (say typeset their) values later on.
You should separate between defining data and processing them, as usual.
The \setkeys macro is for identifying the keys (which one has been given at all?) and stores them to \KV... macros. Those values can be used arbitrarily often inside thecatalogueentry` command to do some (weird) things with them.
\documentclass{article}
\usepackage{keyval}
\newcommand{\catalogueentry}[1]{%
\setkeys{entrydetails}{#1}
\noindent \textbf{Intentory number:} \emph{\KVIntentoryNumber}
\noindent \textbf{Weight:} \emph{\KVWeight}
\noindent \textbf{Diameter:} \emph{\KVDiameter}
}
\makeatletter
\define@key{entrydetails}{intentorynumber}{\def\KVIntentoryNumber{#1}}
\define@key{entrydetails}{weight}{\def\KVWeight{#1}}
\define@key{entrydetails}{diameter}{\def\KVDiameter{#1}}
\makeatother
\begin{document}
\catalogueentry{intentorynumber=0001,
diameter= very small,
weight=really heavy,
}
\catalogueentry{intentorynumber=0002,
weight={${2\times 10^{30}\;}$ kg}, % Sorry Joseph, no \SI... here :-P
diameter= very large
}
\end{document}

Update
As long as no grouping is involved, the key value macros are global, i.e. the content from one call of the outer command to the next one, the values persist, unless overwritten by a new specification.
This can be changed with grouping.
Anyway (and this was missing from the first version): If the key is not given at all, the relevant key macro isn't defined and a call to \KV... will fail. Using \ifdef{\KV...}{true branch}{false branch} will prevent this.
\documentclass{article}
\usepackage{keyval}
\usepackage{siunitx} % Just to make Joseph Wright happy :-P
\usepackage{etoolbox}
\newcommand{\catalogueentry}[1]{%
\begingroup
\setkeys{entrydetails}{#1}
\ifdef{\KVIntentoryNumber}{%
\noindent \textbf{Intentory number:} \emph{\KVIntentoryNumber} %
}{}%
\ifdef{\KVWeight}{%
\noindent \textbf{Weight:} \emph{\KVWeight}%
}{}%
\ifdef{\KVDiameter}{%
\noindent \textbf{Diameter:} \emph{\KVDiameter}%
}{}%
\endgroup
}
\makeatletter
\define@key{entrydetails}{intentorynumber}{\def\KVIntentoryNumber{#1}}
\define@key{entrydetails}{weight}{\def\KVWeight{#1}}
\define@key{entrydetails}{diameter}{\def\KVDiameter{#1}}
\makeatother
\begin{document}
\catalogueentry{intentorynumber=0001,
diameter= very small,
weight=really heavy,
}
\catalogueentry{intentorynumber=0002,
weight={\SI{2d30}{kg}},
diameter= very large
}
\catalogueentry{intentorynumber=0003,
diameter={\SI{13.7d9}{ly}}
}
\end{document}

inventoryrather thanintentory? – Jul 08 '15 at 20:19