When I publish a component A, which is linked in B and B in turn is used on some page C, I just want C to be published. But what's happening is if B has some A2 also linked inside, parallel to A, and A2 is on multiple pages, all those pages are getting published. Is this normal? How can I avoid it. I just want only the linear hierarchy to be published, not the nested stuff.
Sounds like a job for a Custom Resolver. Have a look at the documentation: http://sdllivecontent.sdl.com/LiveContent/content/en-US/SDL_Tridion_2011_SPONE/concept_753C261063AD4B9CA5E4F50BD4FD48E9 (login required).
There are few examples of this on http://tridiondeveloper.com, e.g. http://www.tridiondeveloper.com/a-custom-resolver-in-practice
It's possible you're publishing A2 from B's template using RenderComponentPresentation() or A2 has a "dynamic template."
You could instead publish page C directly or not add A2 to the package. Add custom resolving if you can't create your preferred publishing behavior through template changes.
Already-published items using your item are published because of default resolving ("resolve back") as seen in "items to publish."
But items your item links to are added by templates ("package forward"). The main exception is pages will also queue their DCPs when published.
I describe the difference in this post: http://www.createandbreak.net/2013/10/lets-play-what-published-that-aka-sdl.html
You can disable
Link Propagation and then develop a custom resolver to add what you actually need. You need to be careful there because the data in your web site will be inconsistent. Tridion is publishing the whole hierarchy because it needs to make the web site consistent with all the changes (static components embedded in pages). This is happening because your component is a static component, it won't be the case if you have a dynamic component, in that case Tridion will just publish the component.