I don't think this is Charles' bug. I think the following is perfectly reasonable:
% setopt autonamedirs # Enable AND to benefit from standard parameters like JAVA_HOME
% hash -d n=/n/path ... # Define custom named directories that don't clutter $<TAB> completions
% foo ... # Call functions from any imported library without fear that your custom directories will get erased
Currently if the function "foo" happens to declare a local string parameter named "n", the custom named directory "n" will be erased (independent of what value "foo" assigns to "n" and whether "foo" intended to create a named directory or not). That, to me, looks very much like a Zsh bug or at least an AND bug.
Philippe