Here is an example:
Human: do you like cats
Bot: Sure. I like them very much. Do you like them?
Human: yes
Bot: Cool. My favourite is Garfield.
Human: yes
Bot: What do you mean "yes"?
<category>
<pattern>DO YOU LIKE CATS</pattern>
<template>
<think><set name="topic">cats</set></think>
Sure. I like them very much. Do you like them?
</template>
</category>
<category>
<pattern>YES</pattern>
<that>DO YOU LIKE THEM</that>
<template>
Sorry. Who are "they"?
</template>
</category>
<topic name="CATS">
<category>
<pattern>YES</pattern>
<that>DO YOU LIKE THEM</that>
<template>
Cool. My favourite is Garfield.
</template>
</category>
<category>
<pattern>YES</pattern>
<template>
What do you mean "yes"?
</template>
</category>
</topic>
However, this is a contrived example for demonstration, as you could do this with just <that> unless you had loads of "Do you like them?" type categories.
In the case of duplicates, I personally would go for Dave's option B. Sometimes, it's easier just to add a duplicate category than to search back through your AIML files to find the original. Option C would be a nightmare to debug, especially if you had a few hundred AIML files with matching categories. Bad practice I know but you will get people who do this.